package cn.fanyc.action.blockchain.fbc.contract;

import cn.fanyc.action.blockchain.fbc.contract.api.StateList;
import cn.fanyc.action.blockchain.fbc.contract.api.impl.StateListImpl;
import org.hyperledger.fabric.contract.Context;

import java.util.List;

/**
 * 链上票据列表对象
 *
 * @author Fanyc
 * @date 2020-10-19 17:14
 */
public class PaperList {

    /**
     * 列表对象管理器
     */
    private StateList stateList;

    /**
     * 构造函数
     *
     * @param ctx 上下文
     */
    public PaperList(Context ctx) {
        this.stateList = new StateListImpl(ctx, PaperList.class.getSimpleName(), Paper::deserialize);
    }

    /**
     * 添加票据到票据列表中
     *
     * @param paper 票据对象
     * @return 当前票据列表
     */
    public PaperList addPaper(Paper paper) {
        this.stateList.addState(paper);
        return this;
    }

    /**
     * 根据票据Key从票据列表中获取票据对象
     *
     * @param paperKey 票据Key
     * @return 票据对象
     */
    public Paper getPaper(String paperKey) {
        return (Paper) this.stateList.getState(paperKey);
    }

    /**
     * 更新票据对象到票据列表中
     *
     * @param paper 票据对象
     * @return 当前票据列表
     */
    public PaperList updatePaper(Paper paper) {
        this.stateList.updateState(paper);
        return this;
    }

    /**
     * 获取所有票据的Key列表
     *
     * @return 票据Key列表对象
     */
    public List<Object> getKeys() {
        return this.stateList.getKeys();
    }
}
